#ifndef _ListaEnlazada_h_
#define _ListaEnlazada_h_
#include <stddef.h>
#include <Classes.hpp>
#include <Controls.hpp>
#include "Nodo.h"
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
  class EListException{};
  class EListOutOfMemory : public EListException{};
  class EListOutOfRange  : public EListException{};
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
  class TListaE {
    private :
      typedef void (*TFuncionAccion)(TNodo*, void* referencia = NULL);
      typedef bool (*TFuncionCondicional)(TNodo*, void*  referencia = NULL);
      TNodo* PosNodo(int);
    protected:
      int   longitud;
      TNodo *primero;
    public :
      TListaE();
      TListaE(void*);
      TListaE(TListaE *);
      ~TListaE();
      void  Anadir(void*);
      void  Eliminar(int);
      void  Eliminar(void*);
      void  Insertar(void*, int);
      void* Transferir(int);
      bool  Update(void*, int);
      int   Longitud(){return longitud;}
      void* Obtener(int);
      void  ParaCada(TFuncionAccion, void*);
      void* PrimeroQueCumple(TFuncionCondicional, void*);
      void  TodoQueCumple(TFuncionCondicional, TListaE&, void*);
      int   CuantosCumplen(TFuncionCondicional, void*);
      void  OrdenarLista(TFuncionCondicional, void*);
      bool  Vacia(){return !longitud;};
      TListaE operator=(const TListaE &ListaT) {longitud = ListaT.longitud; primero = ListaT.primero; return *this;};
  };
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#endif
 